package juc2.volatiledome;

/**
 * 1.volatile关键字的作用 利用可见性做状态标识
 */
public class VolatileFlagDemo {
    // volatile状态标记：控制线程是否运行
    private volatile boolean isRunning = true;
    public void start() {
        new Thread(() -> {
            int i = 0;
            // 读取isRunning（volatile读，确保看到最新值）
            while (isRunning) {
                System.out.println("线程运行中，计数：" + i);
                i++; // 业务逻辑
            }
            System.out.println("线程停止，计数：" + i);
        }).start();
    }
    public void stop() {
        // 修改isRunning（volatile写，立即刷新到主内存）
        System.out.println("发送停止信号");
        isRunning = false;
    }
    public static void main(String[] args) throws InterruptedException {
        VolatileFlagDemo demo = new VolatileFlagDemo();
        demo.start();
        Thread.sleep(10); // 运行1秒
        demo.stop(); // 发送停止信号
    }
}
